package servlet;

import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.util.Random; 



public class RandCodeImage extends HttpServlet { 

private Font mFont = new Font("Arial Black", Font.PLAIN, 15); //设置字体 
private int lineWidth = 2; //干扰线的长度=1.414*lineWidth 
private int width = 60; //定义图形大小 
private int height = 20; //定义图形大小 
private int count = 200; 


private Color getRandColor(int fc, int bc) { //取得给定范围随机颜色 


HttpServletRequest request; 

Random random = new Random(); 

if (fc > 255) { 

fc = 255; 
} 

if (bc > 255) { 

bc = 255; 
} 

int r = fc + random.nextInt(bc - fc); 
int g = fc + random.nextInt(bc - fc); 
int b = fc + random.nextInt(bc - fc); 

return new Color(r, g, b); 
} 


public void doPost(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException { 

doGet(request, response); 
} 


public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException { 

String sessionName=(String)request.getParameter("sessionName"); 
if(sessionName==null||sessionName.length()==0){ 
sessionName="rand"; 
} 


response.setHeader("Pragma", "No-cache"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 
response.setContentType("image/png"); 


BufferedImage image = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_RGB); 


Graphics2D g = (Graphics2D) image.getGraphics(); 


Random random = new Random(); 


g.setColor(getRandColor(200, 250)); //---1 

g.fillRect(0, 0, width, height); 


g.setFont(mFont); 


g.setColor(getRandColor(0, 20)); //---2 
g.drawRect(0, 0, width - 1, height - 1); 


for (int i = 0; i < count; i++) { 

g.setColor(getRandColor(150, 200)); //---3 

int x = random.nextInt(width - lineWidth - 1) + 1; //保证画在边框之内 
int y = random.nextInt(height - lineWidth - 1) + 1; 
int xl = random.nextInt(lineWidth); 
int yl = random.nextInt(lineWidth); 
g.drawLine(x, y, x + xl, y + yl); 
} 


String sRand = ""; 

for (int i = 0; i < 4; i++) { 

String rand = String.valueOf(random.nextInt(10)); 
sRand += rand; 


g.setColor(new Color(20 + random.nextInt(130), 
20 + random.nextInt(130), 
20 + random.nextInt(130))); //--4--50-100 

g.drawString(rand, (13 * i) + 6, 16); 

} 


request.getSession().setAttribute(sessionName, sRand); 

g.dispose(); 


ImageIO.write(image, "PNG", response.getOutputStream()); 
} 
}